From 7462de8fbab0de1b05c5c128b9d353770f10ce09 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Wed, 21 Aug 2013 15:05:44 -0400 Subject: [PATCH] gtkwindow: Split code that detects if we want CSD out This will get a bit more complex when we enable CSD for custom headerbars https://bugzilla.gnome.org/show_bug.cgi?id=706529 --- gtk/gtkwindow.c | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 71fc55b5a2..2e4ed1269f 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -5241,43 +5241,42 @@ create_titlebar (GtkWindow *window) return titlebar; } -static void -create_decoration (GtkWidget *widget) +static gboolean +gdk_window_should_use_csd (GtkWindow *window) { - GtkWindow *window = GTK_WINDOW (widget); GtkWindowPrivate *priv = window->priv; - /* Client decorations already created */ - if (priv->client_decorated) - return; - if (!priv->decorated) - return; + return FALSE; if (priv->type == GTK_WINDOW_POPUP) - return; + return FALSE; #ifdef GDK_WINDOWING_WAYLAND - if (GDK_IS_WAYLAND_DISPLAY (gtk_widget_get_display (widget))) - priv->client_decorated = TRUE; + if (GDK_IS_WAYLAND_DISPLAY (gtk_widget_get_display (GTK_WIDGET (window)))) + return TRUE; #endif - if (!priv->client_decorated && - g_strcmp0 (g_getenv ("GTK_CSD"), "1") == 0) + return (g_strcmp0 (g_getenv ("GTK_CSD"), "1") == 0); +} + +static void +create_decoration (GtkWidget *widget) +{ + GtkWindow *window = GTK_WINDOW (widget); + GtkWindowPrivate *priv = window->priv; + +#ifdef GDK_WINDOWING_X11 + if (GDK_IS_X11_DISPLAY (gtk_widget_get_display (widget))) { GdkVisual *visual; /* We need a visual with alpha */ visual = gdk_screen_get_rgba_visual (gtk_widget_get_screen (widget)); if (visual) - { - gtk_widget_set_visual (widget, visual); - priv->client_decorated = TRUE; - } + gtk_widget_set_visual (widget, visual); } - - if (!priv->client_decorated) - return; +#endif if (priv->title_box == NULL) { @@ -5700,7 +5699,8 @@ gtk_window_realize (GtkWidget *widget) window = GTK_WINDOW (widget); priv = window->priv; - create_decoration (widget); + if (!priv->client_decorated && gdk_window_should_use_csd (window)) + create_decoration (widget); gtk_widget_get_allocation (widget, &allocation); -- 2.30.2